<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
<title>Simple Remote Python</title>
<meta name="author" content="Ricardo Henriques &lt;paxcalpt&#64;gmail.com&gt;" />
<meta name="copyright" content="2009 by Ricardo Henriques" />
<style type="text/css">

/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 5196 2007-06-03 20:25:28Z wiemann $
:Copyright: This stylesheet has been placed in the public domain.

Default cascading style sheet for the HTML output of Docutils.

See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/

/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
  border: 0 }

table.borderless td, table.borderless th {
  /* Override padding for "table.docutils td" with "! important".
     The right padding separates the table cells. */
  padding: 0 0.5em 0 0 ! important }

.first {
  /* Override more specific margin styles with "! important". */
  margin-top: 0 ! important }

.last, .with-subtitle {
  margin-bottom: 0 ! important }

.hidden {
  display: none }

a.toc-backref {
  text-decoration: none ;
  color: black }

blockquote.epigraph {
  margin: 2em 5em ; }

dl.docutils dd {
  margin-bottom: 0.5em }

/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
  font-weight: bold }
*/

div.abstract {
  margin: 2em 5em }

div.abstract p.topic-title {
  font-weight: bold ;
  text-align: center }

div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
  margin: 2em ;
  border: medium outset ;
  padding: 1em }

div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
  font-weight: bold ;
  font-family: sans-serif }

div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title {
  color: red ;
  font-weight: bold ;
  font-family: sans-serif }

/* Uncomment (and remove this text!) to get reduced vertical space in
   compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
  margin-bottom: 0.5em }

div.compound .compound-last, div.compound .compound-middle {
  margin-top: 0.5em }
*/

div.dedication {
  margin: 2em 5em ;
  text-align: center ;
  font-style: italic }

div.dedication p.topic-title {
  font-weight: bold ;
  font-style: normal }

div.figure {
  margin-left: 2em ;
  margin-right: 2em }

div.footer, div.header {
  clear: both;
  font-size: smaller }

div.line-block {
  display: block ;
  margin-top: 1em ;
  margin-bottom: 1em }

div.line-block div.line-block {
  margin-top: 0 ;
  margin-bottom: 0 ;
  margin-left: 1.5em }

div.sidebar {
  margin: 0 0 0.5em 1em ;
  border: medium outset ;
  padding: 1em ;
  background-color: #ffffee ;
  width: 40% ;
  float: right ;
  clear: right }

div.sidebar p.rubric {
  font-family: sans-serif ;
  font-size: medium }

div.system-messages {
  margin: 5em }

div.system-messages h1 {
  color: red }

div.system-message {
  border: medium outset ;
  padding: 1em }

div.system-message p.system-message-title {
  color: red ;
  font-weight: bold }

div.topic {
  margin: 2em }

h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
  margin-top: 0.4em }

h1.title {
  text-align: center }

h2.subtitle {
  text-align: center }

hr.docutils {
  width: 75% }

img.align-left {
  clear: left }

img.align-right {
  clear: right }

ol.simple, ul.simple {
  margin-bottom: 1em }

ol.arabic {
  list-style: decimal }

ol.loweralpha {
  list-style: lower-alpha }

ol.upperalpha {
  list-style: upper-alpha }

ol.lowerroman {
  list-style: lower-roman }

ol.upperroman {
  list-style: upper-roman }

p.attribution {
  text-align: right ;
  margin-left: 50% }

p.caption {
  font-style: italic }

p.credits {
  font-style: italic ;
  font-size: smaller }

p.label {
  white-space: nowrap }

p.rubric {
  font-weight: bold ;
  font-size: larger ;
  color: maroon ;
  text-align: center }

p.sidebar-title {
  font-family: sans-serif ;
  font-weight: bold ;
  font-size: larger }

p.sidebar-subtitle {
  font-family: sans-serif ;
  font-weight: bold }

p.topic-title {
  font-weight: bold }

pre.address {
  margin-bottom: 0 ;
  margin-top: 0 ;
  font-family: serif ;
  font-size: 100% }

pre.literal-block, pre.doctest-block {
  margin-left: 2em ;
  margin-right: 2em }

span.classifier {
  font-family: sans-serif ;
  font-style: oblique }

span.classifier-delimiter {
  font-family: sans-serif ;
  font-weight: bold }

span.interpreted {
  font-family: sans-serif }

span.option {
  white-space: nowrap }

span.pre {
  white-space: pre }

span.problematic {
  color: red }

span.section-subtitle {
  /* font-size relative to parent (h1..h6 element) */
  font-size: 80% }

table.citation {
  border-left: solid 1px gray;
  margin-left: 1px }

table.docinfo {
  margin: 2em 4em }

table.docutils {
  margin-top: 0.5em ;
  margin-bottom: 0.5em }

table.footnote {
  border-left: solid 1px black;
  margin-left: 1px }

table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
  padding-left: 0.5em ;
  padding-right: 0.5em ;
  vertical-align: top }

table.docutils th.field-name, table.docinfo th.docinfo-name {
  font-weight: bold ;
  text-align: left ;
  white-space: nowrap ;
  padding-left: 0 }

h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
  font-size: 100% }

ul.auto-toc {
  list-style-type: none }

</style>
</head>
<body>
<div class="document" id="simple-remote-python">
<h1 class="title">Simple Remote Python</h1>
<table class="docinfo" frame="void" rules="none">
<col class="docinfo-name" />
<col class="docinfo-content" />
<tbody valign="top">
<tr class="field"><th class="docinfo-name">Info:</th><td class="field-body">See <a class="reference external" href="http://code.google.com/p/srpy/">the Simple Remote Python site</a> for more information.</td>
</tr>
<tr><th class="docinfo-name">Author:</th>
<td>Ricardo Henriques &lt;<a class="reference external" href="mailto:paxcalpt&#64;gmail.com">paxcalpt&#64;gmail.com</a>&gt;</td></tr>
<tr><th class="docinfo-name">Copyright:</th>
<td>2009 by Ricardo Henriques</td></tr>
<tr class="field"><th class="docinfo-name">License:</th><td class="field-body">BSD, see LICENSES folder for more details.</td>
</tr>
</tbody>
</table>
<div class="section" id="about">
<h1>About</h1>
<p>Simple Remote Python (SRPy) intends to harness the power of the Python by
allowing multiple python programs (instances) to seamlessly communicate and
share information between each other. As such, each CPU (or core) in each
computer can be considered as an individual that can request for other
individuals to store information or run processing tasks. In this context,
SRPy abstracts itself from the physical boundaries between processors and
computers by looking at them simply as volunteer workers that are able to
deal with workloads - this workers can even work in a social manner by
communicating with each other on a non-centralized way, sharing information
and processing requests.
It features:</p>
<blockquote>
<ul class="simple">
<li>Remote control of python instances (through Python or Jython)</li>
<li>Parallel execution of python code on SMP and clusters</li>
<li>Low overhead</li>
<li>Pure python code</li>
<li>Cross-platform portability and interoperability (Windows, Linux, Unix, Mac OS X)</li>
<li>Cross-architecture portability and interoperability (x86, x86-64, etc.)</li>
<li>Open source</li>
</ul>
</blockquote>
<p><strong>Note</strong>: Although Jython SRPy clients are supported, the server will not run
under Jython. This is a limitation inherited by the Pyro dependency that will
be fixed soon.</p>
</div>
<div class="section" id="installation">
<h1>Installation</h1>
<p>If you have <a class="reference external" href="http://peak.telecommunity.com/DevCenter/setuptools">setuptools</a>
installed you should be able to do <strong>easy_install srpy</strong> to install SRPy.
Otherwise you can download the project source and do <strong>python setup.py install</strong>
to install. SRPy also works directly from source, just copy the folder srpy to
your favorite location and import it. To start the server do:
<strong>python path/to/srpyapp.py</strong></p>
</div>
<div class="section" id="dependencies">
<h1>Dependencies</h1>
<p>The SRPy distribution depends on the <a class="reference external" href="http://pyro.sourceforge.net/">Pyro</a>, it is bundled inside SRPy.
It has been tested on Python 2.5 and 2.6.</p>
</div>
<div class="section" id="acknowledgments">
<h1>Acknowledgments</h1>
<p>SRPy comes bundled with <a class="reference external" href="http://pyro.sourceforge.net/">Pyro</a>, most of its
features come from interfacing with the Pyro library.</p>
<p>SRPy is not the only software of the genre, many other great libraries that
provide similar features are available:</p>
<blockquote>
<ul class="simple">
<li><a class="reference external" href="http://pyro.sourceforge.net/">Pyro</a></li>
<li><a class="reference external" href="http://www.parallelpython.com">Parallel-Python</a></li>
<li><a class="reference external" href="http://rpyc.wikidot.com/">RPyC</a></li>
<li><a class="reference external" href="http://code.google.com/p/papyros/">papyros</a></li>
<li><a class="reference external" href="http://www.freenet.org.nz/python/spiro/">SPIRO</a></li>
</ul>
</blockquote>
<p>Many of the ideas inside SRPy have come from this packages, we don't intend
to be the best, just a different flavor that concentrates in bringing:</p>
<blockquote>
<ul class="simple">
<li>easy of use</li>
<li>compatibility with the great features brought from <a class="reference external" href="http://pyro.sourceforge.net/">Pyro</a></li>
<li>both Python and Jython compatibility</li>
</ul>
</blockquote>
</div>
<div class="section" id="documentation">
<h1>Documentation</h1>
<p>Documentation can be found on the <em>doc/</em> directory or can be generated with the
<a class="reference external" href="http://epydoc.sourceforge.net/">epydoc</a> tool by running
<strong>epydoc --config=epydoc-config</strong>. Also do <strong>python path/to/srpyapp.py --help</strong>
to see the server options.</p>
</div>
<div class="section" id="changelog">
<h1>Changelog</h1>
<blockquote>
<ul>
<li><dl class="first docutils">
<dt>0.2.1</dt>
<dd><ul class="first last simple">
<li>Fixed bug that didn't allow multi-server start on windows</li>
</ul>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt>0.2.0</dt>
<dd><ul class="first last simple">
<li>No longer depends on Parallel-Python</li>
<li>Documentation greatly improved and is now included</li>
<li>EngBox now acts as a container</li>
<li>EngBox able to benchmark remote Python Engines</li>
<li>Improved thread safety</li>
<li>Code cleanup</li>
<li>srpyapp.py can now use a Pyro configuration file</li>
</ul>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt>0.1.2</dt>
<dd><ul class="first last simple">
<li>Fixed several errors</li>
<li>Added EngBox class to srpyclient to help manage multiple PythonEngines</li>
</ul>
</dd>
</dl>
</li>
<li><dl class="first docutils">
<dt>0.1.1</dt>
<dd><ul class="first last simple">
<li>Fixed a Pyro import error: Successfully imports bundled Pyro if available</li>
<li>srpy and srpy-bundled are now a unified package</li>
</ul>
</dd>
</dl>
</li>
</ul>
</blockquote>
</div>
</div>
</body>
</html>
